/**
 * @file 坐标处理工具
 * @description 提供坐标转换和处理相关工具函数
 * @date 2024-07-15
 */

import { GeoCoordinate, Position } from '@/types/map';

/**
 * 将GeoCoordinate转换为Position
 * @param coord 地理坐标
 * @returns Position格式的坐标
 */
export function toPosition(coord: GeoCoordinate): Position {
  return {
    lng: coord.longitude,
    lat: coord.latitude
  };
}

/**
 * 将Position转换为GeoCoordinate
 * @param pos Position格式的坐标
 * @returns 地理坐标
 */
export function toGeoCoordinate(pos: Position): GeoCoordinate {
  return {
    longitude: pos.lng,
    latitude: pos.lat
  };
}

/**
 * 计算两点之间的距离(米)
 * @param point1 第一个坐标点
 * @param point2 第二个坐标点
 * @returns 距离，单位米
 */
export function calculateDistance(point1: GeoCoordinate, point2: GeoCoordinate): number {
  const R = 6371000; // 地球半径，单位米
  const lat1 = point1.latitude * Math.PI / 180;
  const lat2 = point2.latitude * Math.PI / 180;
  const deltaLat = (point2.latitude - point1.latitude) * Math.PI / 180;
  const deltaLon = (point2.longitude - point1.longitude) * Math.PI / 180;

  const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
    Math.cos(lat1) * Math.cos(lat2) *
    Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

  return R * c;
} 